package com.example.huadu_server.websocket.service;

import com.example.huadu_server.config.Response;
import com.example.huadu_server.websocket.dto.ConversationDTO;
import com.example.huadu_server.websocket.dto.MessageDTO;
import com.example.huadu_server.websocket.entity.Conversation;
import com.example.huadu_server.websocket.entity.Message;

import java.util.List;
import java.util.Map;

public interface ChatService {
    /**
     * 获取用户的所有会话列表
     * @param userId 用户 ID
     * @return 包含所有会话的 Response
     */
    Response<List<ConversationDTO>> getConversationsByUserId(Integer userId);

    /**
     * 获取房东的所有会话列表
     * @param landlordId 房东 ID
     * @return 包含所有会话的 Response
     */
    Response<List<ConversationDTO>> getConversationsByLandlordId(Integer landlordId);

    /**
     * 发送消息
     * @param messageDTO 消息内容
     * @return 发送结果的 Response
     */
    Response<Map<String, Object>> saveMessage(MessageDTO messageDTO);

    /**
     * 获取会话中的所有消息
     * @param conversationId 会话 ID
     * @return 包含所有消息的 Response
     */
    Response<List<Message>> getMessagesByConversationId(Integer conversationId);

    /**
     * 创建会话
     * @param messageDTO
     * @return
     */
    Response<Conversation> createConversation(MessageDTO messageDTO);

    /**
     * 标记指定会话中当前用户未读消息为已读
     * 只有非当前用户发送的消息才会被更新为已读
     * @param conversationId 会话 ID
     * @param viewerId 当前查看消息的用户ID（如果当前用户是用户，则 viewerId = userId；如果当前用户是房东，则 viewerId = landlordId）
     * @return 返回操作结果
     */
    Response<String> markMessagesAsRead(Integer conversationId, Integer viewerId);


    /**
     * 获取指定会话中某个用户的未读消息数量
     *
     * @param conversationId 会话 ID
     * @param userId         用户 ID
     * @return 未读消息数量
     */
    Response<Integer> getUnreadCountByUserId(Integer conversationId, Integer userId);
}


